
// 查询2017年到2018年入深户的人数
db.getCollection('gzf').count({ "RUHSJ": { $gte: "2017-01-01", $lt: "2018-01-01" } })
// --2013: 19356, 2014: 21717, 2015: 22165, 2016: 28669, 2017: 32213, 2016: 28669, 2019: 15120

db.getCollection('gzf').count({ "RUHSJ": { $gte: "2015-01-01", $lt: "2016-01-01" } })

db.getCollection('gzf').find({}).sort({ "_id": -1 })

db.getCollection('gzf').find({ "RZQK": "放弃选房2次" })

db.getCollection('gzf').distinct("SHOUCCBSJ_GZ")

db.getCollection('gzf').distinct("SHOUCCBSJ_AJ")

db.getCollection('gzf').distinct("REMARK")

db.getCollection('gzf').distinct("RZQK")

db.getCollection('gzf').find({}).sort({ "PAIX": -1 })

db.getCollection('gzf').count({})

// 聚合
// 首次参保时间总人数前五名的月份
// 如果管道没有给出与其的结果，可以进行调试，调试时，可以先只指定第一个管道操作符，如果得到了预期结果，再执行第二个管道操作符，直到尝试到了出现问题的操作符
db.gzf.aggregate({ "$project": { "SHOUCCBSJ": 1 } }, { "$group": { "_id": "$SHOUCCBSJ", "count": { "$sum": 1 } } }, { "$sort": { "count": -1 } }, { "$limit": 5 }).toArray();
// [
//     {
//         "_id": "2014-07",
//         "count": 3856.0
//     },
//     {
//         "_id": "2015-07",
//         "count": 3484.0
//     },
//     {
//         "_id": "2011-07",
//         "count": 3303.0
//     },
//     {
//         "_id": "2012-07",
//         "count": 3257.0
//     },
//     {
//         "_id": "2013-07",
//         "count": 3160.0
//     }
// ]

// 看起来类似事件机制  key 和对应的事件值 value，这里的 value 就是 {count: 1}
// key 是原始文档里面的 key ，也可以是某些特定的值，比如 "name"
// value 则要根据想要做的处理来设置，比如这里想要统计数量，就设置为 { count: 1 }
map = function () {
    for (var key in this) {
        emit(key, { count: 1 });
    }
};
// reduce 的 key 在这里好像没有用，推测是在 mapreduce 的后台操作中起作用的
// emits 列表是 emit 中的 value 集合
reduce = function (key, emits) {
    total = 0;
    for (var i in emits) {
        total += emits[i].count;
    }
    return { "count": total };
}
mr = db.runCommand({ "mapreduce": "foo", "map": map, reduce: "reduce" });
